In [1]:
from sklearn import datasets
from sklearn.naive_bayes import BernoulliNB, MultinomialNB, GaussianNB
from sklearn.model_selection import cross_val_score
import numpy as np

In [2]:
digits = datasets.load_digits()
breast = datasets.load_breast_cancer()

In [3]:
X_digits = digits.data
y_digits = digits.target

X_breast = breast.data
y_breast = breast.target

In [4]:
Bern_clf = BernoulliNB()
Mult_clf = MultinomialNB()
Gauss_clf = GaussianNB()

In [7]:
Bern_val_score_digits = cross_val_score(Bern_clf,X_digits,y_digits).mean()
Mult_val_score_digits = cross_val_score(Mult_clf,X_digits,y_digits).mean()
Gauss_val_score_digits = cross_val_score(Gauss_clf,X_digits,y_digits).mean()

Bern_val_score_breast = cross_val_score(Bern_clf,X_breast,y_breast).mean()
Mult_val_score_breast = cross_val_score(Mult_clf,X_breast,y_breast).mean()
Gauss_val_score_breast = cross_val_score(Gauss_clf,X_breast,y_breast).mean()

In [9]:
print 'BernoulliNB, digits = ', Bern_val_score_digits
print 'MultinomialNB, digits = ', Mult_val_score_digits
print 'GaussianNB, digits = ', Gauss_val_score_digits
print
print 'BernoulliNB, breast = ', Bern_val_score_breast
print 'MultinomialNB, breast = ', Mult_val_score_breast
print 'GaussianNB, breast = ', Gauss_val_score_breast


BernoulliNB, digits =  0.825823650778
MultinomialNB, digits =  0.870877148974
GaussianNB, digits =  0.818600380355

BernoulliNB, breast =  0.627420402859
MultinomialNB, breast =  0.894579040193
GaussianNB, breast =  0.936749280609

Вопрос 1

Каким получилось максимальное качество классификации на датасете breast_cancer?

Вопрос 2

Каким получилось максимальное качество классификации на датасете digits?

Вопрос 3

Выберите верные утверждения и запишите их номера через пробел (в порядке возрастания номера):

1) На вещественных признаках лучше всего сработал наивный байесовский классификатор с распределением Бернулли

2) На вещественных признаках лучше всего сработал наивный байесовский классификатор с мультиномиальным распределением

3) Мультиномиальное распределение лучше показало себя на выборке с целыми неотрицательными значениями признаков

4) На вещественных признаках лучше всего сработало нормальное распределение


In [10]:
ans1 = '0.936749280609'
ans2 = '0.870877148974'
ans3 = '3 4'

def F_write(ans,file_name):
    with open(file_name, 'w') as file_out:
        file_out.write(str(ans))
        
F_write(ans1,'naive_bayes_ans_1')
F_write(ans2,'naive_bayes_ans_2')
F_write(ans3,'naive_bayes_ans_3')